//
//  GCDdemo.swift
//  BCSwiftDemo
//
//  Created by Shine on 2019/3/14.
//  Copyright © 2019年 Shine. All rights reserved.
//

import UIKit

class GCDdemo: UIViewController {

    let boVM = BoutiqueListVM()
    let chVM = BCChildListVM()
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let imageV = UIImageView(frame: CGRect(x: 100, y: 100, width: 165, height: 220))
        imageV.backgroundColor = UIColor.red
        UIImage.clipCircleImage(UIImage(named: "1")) { (newImage) in
            imageV.image = newImage
        }
        view.addSubview(imageV)
        
        
        view.backgroundColor = UIColor.white
        let seriaQueue = DispatchQueue(label: "seriaQueue")
        let concurrentQueue = DispatchQueue(label: "concurrentQueue", attributes: .concurrent)

//        seriaQueue.sync {
//            boVM.requsetBoutique_list(1, {
//                sleep(3)
//                print("1")
//            })
//        }
//
//       seriaQueue.sync {
//            chVM.requestChildList(.Subscription, {
//                print("2")
//            })
//        }
        
//        let group = DispatchGroup()
//        group.enter()
//        concurrentQueue.async(group: group) {
//            self.boVM.requsetBoutique_list(1, {
//                sleep(3)
//                print("1")
//                group.leave()
//            })
//        }
//
//        group.enter()
//        concurrentQueue.async(group: group) {
//            self.chVM.requestChildList(.Subscription, {
//                print("2")
//                group.leave()
//            })
//        }
    
      let semaphore = DispatchSemaphore(value: 1)
      concurrentQueue.async() {
            semaphore.wait()
            self.boVM.requsetBoutique_list(1, {
                sleep(3)
                print("1-----------1")
                semaphore.signal()
            })
        }
        
        concurrentQueue.async() {
            semaphore.wait()
            self.boVM.requsetBoutique_list(1, {
                print("2")
                semaphore.signal()
            })
        }
        
        concurrentQueue.async() {
            semaphore.wait()
            self.chVM.requestChildList(.Subscription, {
                print("3")
                semaphore.signal()
            })
        }
        
        // .barrier  栅栏不能保障自己控制在需要的地方进行下一步 （含有block回调的时候）
        // 任务的完成顺序是按照自己的设计想法来了，可是在实际的操作中一般都包含有回调的block，回调的block会影响到自己的预想操作，所以需要含有自己能手动控制顺序的操作，如信号量、group的出组然后group.notify 去按照自己的规划来。
        
//        group.notify(queue: concurrentQueue) {
//            self.chVM.requestChildList(.Subscription, {
//                print("2")
//            })
//        }
        
        
        
    }


}
